# -*- coding: utf-8 -*-
#带有SciPy信号模块的fftconvolve()函数的频域高斯模糊滤波器
#内部通过乘法和卷积定理
from skimage.color import rgb2gray
from skimage.io import imread
from scipy import signal
import numpy as np
import scipy.fftpack as fp
from matplotlib import pylab

im=np.mean(imread('mandrill.jpg'),axis=2)
print(im.shape)
gauss_kernel=np.outer(signal.gaussian(11,3),signal.gaussian(11,3))#定义二维高斯模板11X11
im_blurred=signal.fftconvolve(im,gauss_kernel,mode='same')#进行卷积
pylab.figure(figsize=(10,8))
pylab.subplot(131)
pylab.imshow(im,cmap='gray')
pylab.title('Original',size=20)
pylab.axis('off')

pylab.subplot(132)
pylab.imshow(gauss_kernel)
pylab.title('Gaussian Kernel',size=15)
pylab.axis('off')

pylab.subplot(133)
pylab.imshow(im_blurred,cmap='gray')
pylab.title('Blurred',size=20)
pylab.axis('off')
pylab.show()

#绘制卷积后的原始图像和模糊图像的频谱
F1=fp.fft2(im).astype(float)
F2=fp.fftshift(F1)
pylab.figure(figsize=(10,8))
pylab.subplot(121)
pylab.imshow((20*np.log10(0.1+F2)).astype(int),cmap='gray')
pylab.title('Original Image Spectrum',size=20)

F3=fp.fft2((im_blurred).astype(float))
F4=fp.fftshift(F3)
pylab.subplot(122)
pylab.imshow((20*np.log10(0.1+F4)).astype(int),cmap='gray')
pylab.title('Blurred Image Spectrum',size=20)
pylab.show()



